package com.nuanshui.heatedloan.msgcenter.apppush.filter;

import com.nuanshui.heatedloan.msgcenter.apppush.bean.AppPushResult;
import com.nuanshui.heatedloan.msgcenter.apppush.bean.Invoker;
import com.nuanshui.heatedloan.msgcenter.model.AppPushMessage;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
 * 推送过滤器容器
 * @param 
 * @author guohao
 * @date 2017年2月10日 下午4:49:45
 * @since $
 */
public class AppPushFilterContainer {
	
	public   List<AppPushFilterWrapper> filters = new ArrayList<AppPushFilterWrapper>();
	
	/**
	 * 注册一个过滤器
	 * @param @param wrapper
	 * @author guohao
	 * @date 2017年2月10日 下午4:49:33
	 * @since $
	 */
	public void register(AppPushFilterWrapper wrapper) {
		filters.add(wrapper);
		Collections.sort(filters);
	}
	
	
    /**
     * 此方法生成一个调用连
     * @param @param invoker
     * @param @return
     * @author guohao
     * @date 2017年2月10日 下午4:48:46
     * @since $
     */
    public     Invoker  buildFilterChain(final Invoker invoker) {
    	Invoker last = invoker;
        if (filters.size() > 0) {
            for (int i = filters.size() - 1; i >= 0; i --) {
                final AppPushFilter  filter = filters.get(i).getTarget();
                final Invoker next = last;
                last = new Invoker() {	
					@Override
					public AppPushResult doInvoker(AppPushMessage appPushMessage) {
						return filter.invoke(next, appPushMessage);
					}
				};
            }
        }
        
        return last;
    }
}
